﻿//
// Copyright (c) 2011 Western Data Solutions (www.westerndatasolutions.com) (Armen Shimoon)
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated 
// documentation files (the "Software"), to deal in the Software without restriction, including without 
// limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 
// the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO 
// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS 
// OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
using System;

namespace WDS.Bencode
{
    /// <summary>
    /// Wrapper for capturing error information when attempting to generate bencoded data from a bencoded document model
    /// </summary>
    public class BencodeGenerationException : Exception
    {
        /// <summary>
        /// The character position the generation failed at
        /// </summary>
        public long FailedAtPosition
        {
            get; set;
        }
        /// <summary>
        /// Constructor providing the inner exception along with an optional fail-at position
        /// </summary>
        /// <param name="message">Human readable error message</param>
        /// <param name="innerEx">The inner exception that caused the failure</param>
        /// <param name="failedAt">The position the generation failed at</param>
        public BencodeGenerationException(string message, Exception innerEx, long failedAt = 0) : base(message, innerEx)
        {
            FailedAtPosition = failedAt;
        }

        /// <summary>
        /// Most general constructor, with a human readable message, along with an optional fail-at position
        /// </summary>
        /// <param name="message">Human readable message</param>
        /// <param name="failedAt">Position the generation failed at</param>
        public BencodeGenerationException(string message, long failedAt = 0) : base(message)
        {
            FailedAtPosition = failedAt;
        }

      
    }
}
